/* 
 * File:   Calculate.h
 * Author: song
 *
 * Created on 2010年11月21日, 上午9:40
 */

#ifndef CALCULATE_H
#define	CALCULATE_H
#include"Data.h"



class Calculate {
public:
    Calculate();
    Calculate(Camera *cam, trackObject *objsL, trackObject *objsR, int size);
    Calculate(const Calculate& orig);
    virtual ~Calculate();

    //对外的唯一接口，计算所有参数
    void Cal();

    //目标匹配模块
    void Match(trackObject objsL[], trackObject objsR[]);

    //根据一帧的结果进行camshift判断是否在另一幅中有该物体,结果体现在calNode中的match
    void Match();

    //计算两个直方图的方差
    bool CalD(CvHistogram *hist0, CvHistogram *hist1);
    
    //计算z方向视深
    void CalZDis();

    //修正坐标数据
    void FixCord(float pre, float fix[], int len);
    //计算修正后的速度数据
    void FixSpeed(parmNode &obj);

    //返回修正的速度
    vector <speedNode> GetSpeed();

    //显示矩形和标号
    void Draw(IplImage * image, CvScalar color);

    calNode objs;
    //另一帧的摄像头对象
    Camera *otherCam;

    //物体个数，应同步track模块
    int objSize;
    //摄像头焦距
    int f;
    //两摄像头间距，单位为厘米
    int tx;
    vector <speedNode> Vs;

private:
    //z为测量时距离摄像头的距离，单位厘米
    //pixNum为测量得到的像素点个数
    //pixDis为对应的pixNum实际距离，单位厘米
    int z, pixNum, pixDis;
    //x,y距离和z视深的比例因子
    double factor;
    //匹配数组，以左摄像头画面中物体开始编号
    vector<int> index;
    //在另一帧计算中临时变量
    trackObject tmpobj;

    //调试使用
    ofstream fout;
    
    //计算各个方向的速度
    void CalSpeed();
};

#endif	/* CALCULATE_H */

